<?php
//播放器的抽象接口
interface Process{
    public function process();
}

//对此接口进行扩展，实现解码和输出的功能
class playerencode implements Process{
    //实现接口的时候要实现接口里面的方法
    public function process()
    {
        echo '我进行了解码',"\r\n";
    }
}

//实现输出功能
class playeroutput implements Process{
    public function process(){
        echo '我进行了输出';
    }
}

//播放器的调度管理器
class playProcess{
    private $message = null;
    public function __construct()
    {

    }
    public function callback(event $event){
        //$event.click() 返回的是一个对象,然后对象是属于接口的话,就直接执行此接口里面的程序
        $this->message = $event->click();
        if($this->message instanceof Process){
            $this->message->process();
        }
    }
}



//最后为事件分拣的处理类,此类负责对事件进行分拣，判断用户或者内部行为,以产生正确的线程,供播放器内置的线程管理器调度
class event{
    private $m;
    public function __construct($me)
    {
        $this->m = $me;
    }

    public function click(){
        switch ($this->m){
            case 'encode':
                return new playerencode();
                break;
            case 'output':
                return new playeroutput();
                break;
        }
    }
}



//具体的产品出来了,在这里定义一个mp4类,这个类是相对封闭的,其中定义了事件的处理逻辑
class mp4{
    public function work(){
        $playProcess = new playProcess();
        $playProcess->callback(new event('encode'));
        $playProcess->callback(new event('output'));
    }
}

//最后运行下面的代码
$mp4 = new mp4();
$mp4->work();








